package com.glory.erp.interceptor;

import org.apache.struts2.ServletActionContext;

import com.glory.erp.auth.emp.bean.Emp;
import com.glory.erp.exception.AppException;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.AbstractInterceptor;

/**
 * @Description: 权限校验
 * @Title: AuthInterceptor.java
 * @Author: 樊双峰
 * @Date: 2018年5月23日 上午12:15:58
 * @Version V1.0
 */
public class AuthInterceptor extends AbstractInterceptor {

	// 当前拦截器对象有Struts创建，因此具有自动装配功能 struts-spring-plugin.jar
	/*private ResourcesService resourcesService;
	
	public void setResourcesService(ResourcesService resourcesService) {
		this.resourcesService = resourcesService;
	}*/

	// 优化之后
	public String intercept(ActionInvocation invocation) throws Exception {
		/*
		 * 获取本次操作
		 * 必须是已经登录的用户才可以操作
		 * 获取登录人信息
		 * 当前人可执行的操作是否包含本次操作对应的内容
		 * 判断当前用户是否可以执行
		 * 对原始方法的调用
		 */
		// 获取本次操作
		String actionName = invocation.getProxy().getAction().getClass().getName();
		String methodName = invocation.getProxy().getMethod();
		String allName = actionName+"."+methodName;
		// 将所有的资源获取到
		// List<Resources> resources = resourcesService.findAll();
		// 将 list --> string字符串
		String resList = ServletActionContext.getServletContext().getAttribute("resList").toString();
		
		// 在进行比对，小于0，表示不需要拦截
		if(!resList.contains(allName)){
			return invocation.invoke();
		}
		
		// 判断是否登录，获取登录人信息
		Emp loginEmp = (Emp) ActionContext.getContext().getSession().get(Emp.EMPINFO);

		// 获取当前人可执行的操作
		// List<Resources> resourcesList = resourcesService.findAllByEmp(loginEmp.getUuid());
		// 判断是否可执行本次操作
		/*for (Resources r : resourcesList) {
			if(r.getUrl().equals(allName)){				
				return invocation.invoke();
			}
		}*/
		if(loginEmp.getResList().contains(allName)){
			return invocation.invoke();
		}
		throw new AppException("Sorry,Please do not operate illegally,Lack of authority");
	}
}